/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Controladores;

import Beans.Usuario;
import java.util.LinkedList;
import java.util.List;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ConcurrentModificationException;
import java.util.Iterator;
import java.util.Random;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;

/**
 *
 * @author Usuario
 */
public class AdmUsuarios {

    private List<Usuario> Usuarios = new LinkedList<Usuario>();
    Usuario  u = new Usuario();
    File archivo=new File("usuarios.dat");

    public List<Usuario> getUsuarios() {
        return Usuarios;
    }

    public void setUsuarios(List<Usuario> Usuarios) {
        this.Usuarios = Usuarios;
    }

     public void grabar() throws IOException {

      FileOutputStream   flujoSalida  = new FileOutputStream(archivo);
      ObjectOutputStream objetoSalida = new ObjectOutputStream(flujoSalida);
      objetoSalida.writeObject(this.getUsuarios());
      objetoSalida.close();
     }


    public void restaurar() throws IOException,ClassNotFoundException {
        if(archivo.exists()==true){
            FileInputStream flujoEntrada    = new FileInputStream(archivo);
            ObjectInputStream objetoEntrada = new ObjectInputStream(flujoEntrada);
            List<Usuario> pro = (List) objetoEntrada.readObject();
            this.setUsuarios(pro);
            objetoEntrada.close();
        }
    }

    public Boolean Existe(String nombre){
        boolean sw=false;
        Iterator it = getUsuarios().iterator();
        while(it.hasNext()){
            u = (Usuario)it.next();
            if(u.getNombre_usuario().equals(nombre)){
                sw=true;
            }
        }
        return sw;
    }

       public int GenerarCodigo(){
        int codigo= 0;
        int limite = 10000;
        Random r = new Random();
        codigo = r.nextInt(limite+1);
       return codigo;

    }

     public Usuario Consultar(String nombre){
        Iterator it = getUsuarios().iterator();
        while(it.hasNext()){
            Usuario Us = (Usuario)it.next();
              if(Us.getNombre_usuario().equals(nombre)){
                 return Us;
              }
         }
        return  new Usuario();
     }

      public void Modificar(String nombre,Usuario us){
        int posicion = this.Posicion(nombre);
         getUsuarios().set(posicion, us);
         JOptionPane.showMessageDialog(null,"Los datos se guardaron "
                                                 + "Satisfactoriamente");
        try {
            this.grabar();
        } catch (IOException ex) {
            Logger.getLogger(Mcliente.class.getName()).log(Level.SEVERE, null, ex);
        }
       }

      public void Registrar(Usuario us){
         if(!Existe(us.getNombre_usuario())){
             getUsuarios().add(us);
             JOptionPane.showMessageDialog(null,"Cuenta creada satisfacoriamente");
            try {
                this.grabar();
            } catch (IOException ex) {
                Logger.getLogger(AdmUsuarios.class.getName()).log(Level.SEVERE, null, ex);
            }
         }else{
             JOptionPane.showMessageDialog(null,"La cuenta"
                                              + " ya se encuentra registrada",
                                              "Informacion"
                                              ,JOptionPane.ERROR_MESSAGE);
         }
      }

        public void Eliminar(String nombre){
        try{
            Iterator it = getUsuarios().iterator();
            while(it.hasNext()){
            u =(Usuario)it.next();
            if(u.getNombre_usuario().equals(nombre)){
              getUsuarios().remove(u);

                        try {
                            this.grabar();
                        } catch (IOException ex) {
                            Logger.getLogger(AdmUsuarios.class.getName()).log(Level.SEVERE, null, ex);
                        }

                  JOptionPane.showMessageDialog(null,"Eliminado","Informacion",JOptionPane.INFORMATION_MESSAGE);
                }
         }
        }catch(ConcurrentModificationException e){

       }
        
        
     }

    public int Posicion(String ced){
          Iterator itc=getUsuarios().iterator();
          int pos=-1;
          int ind=-1;
         while(itc.hasNext()){
             u = (Usuario)itc.next();
            if(u.getNombre_usuario().equals(ced)){
                ind=ind+1;
                 pos=ind;
            }else{
                ind=ind+1;
            }
         }
          return pos;
    }
}
